#include "threadPool.h"
#define SQL_ERROR_CHECK(p, ret, num) {if(ret!=num) {printf("ERROR: %s\n", mysql_error(p));return -1;}}

int tcpInit(char *ip, char *port, int *pSockFd);
int epollAdd(int fd, int epfd);
int epollDel(int fd, int epfd);
void *threadFunc(void *parg);
int makeWorker(threadPool_t *pThreadPool);

typedef struct train_s{
    int dataLength;
    char buf[1000];
}train_t;
typedef struct userinfo_s {
    char user[20];
    char salt[20];
    char ciphertext[1024];
} userinfo_t;
typedef struct virDir_s{
    char id[20];
    char name[20];
    char pre_id[20];
    char md5[50];
    char user[20];
    char isDelete[2];
    char type[2];
} virDir_t;

int transFile(task_t* pTask);
int handleEvent(task_t* pTask);
int OrderJudge(task_t * pTask, virDir_t *preVd);

int myMkdir(task_t* pTask, virDir_t *preVd);
int myPwd(char *returnPath, virDir_t *preVd);//显示当前工作目录
int cd(task_t *pTask, virDir_t *preVd);
int ls(task_t *pTask, virDir_t *preVd);
int removeFile(task_t* pTask, virDir_t *preVd);  //删除文件
//获得md5码
int getMd5(char *fileName, char *s);
int sqlSplice(char *sql, virDir_t *curVd);  //拼接目录信息
//int cd(task_t* pTask);//切换目录，返回当前目录至字符串result
//int ls(task_t* pTask);//显示当前目录内容，返回字符串result
//int myMkdir(task_t* pTask);
int downloadFile(task_t *pTask);//下载文件
//int uploadFile(task_t *pTask);//上传文件
int uploadFile(task_t *pTask, virDir_t *preVd);
int recvn(int netFd,void *p, int n);//自定义接收
void usrConnectRecord(task_t pTask);//用户连接的日志记录
void usrCommandRecord(task_t myTask);
int databaseInit(MYSQL *db);        //数据库连接初始化
int getUserPasswd(userinfo_t *pInfo, char *userName);//获取用户密码信息，正确返回0，否则返回-1
int userAdd(char *userName, char *passwd);  //新增用户存储到数据库
int saltCreate(char *salt);     //随机生成一个盐

int getVirDirInfo(virDir_t *vd, char *userName);    //获取当前虚拟文件的信息